'use strict';

const jwtUtils = require('../utils/jwt');

/**
 * JWT认证中间件
 * 验证token并设置当前用户信息到ctx.user
 */
module.exports = () => {
  return async function jwtAuth(ctx, next) {
    // 从请求头获取token
    const token = jwtUtils.getTokenFromHeader(ctx);
    
    if (token) {
      try {
        // 验证并解析token
        const decoded = jwtUtils.verifyToken(token, ctx.app.config.jwt.secret);
        
        if (decoded) {
          // 将用户信息设置到ctx.user
          ctx.user = {
            id: decoded.id,
            username: decoded.username,
            role: decoded.role
          };
        } else {
          ctx.user = null;
        }
      } catch (error) {
        // token无效，但不阻止请求（有些接口可能需要用户信息，有些不需要）
        ctx.user = null;
      }
    } else {
      ctx.user = null;
    }
    
    await next();
  };
};

